package com.java.base.exercise.current.selfcache.imooccache2;


import java.util.HashMap;
import java.util.Map;

/**
 * @Author RenPu
 * @Date 2021/9/20 20:01
 * @Version 1.0
 * @Description: 实现缓存框架2.0的类，
 **/
public class ImoocCache2<A, V> implements Comtable<A, V> {

    private final Map<A, V> cache = new HashMap<>();

    private Comtable<A, V> c;

    public ImoocCache2(Comtable c) {
        this.c = c;
    }

    @Override
    public synchronized V compter(A arg) throws Exception {
        System.out.println("进入缓存机制！！！！");
        V result = cache.get(arg);
        if (null == result) {
            result = c.compter(arg);
            cache.put(arg, result);

        }
        return result;
    }


    public static void main(String[] args) throws InterruptedException {
        ImoocCache2<String, Integer> imoocCache2 = new ImoocCache2(new ExceptionFuncation());
//        Integer compter =  imoocCache2.compter("13");
//        System.out.println("第一次打印的结果"+compter);
//        Integer compter2=  imoocCache2.compter("13");
//        System.out.println("第二次打印的结果"+compter2);


        //验证2.0缓存框架，使用synchronized关键字影响性能的差异
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    imoocCache2.compter("667");
                    System.out.println("第一次获取数据");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();


        //验证2.0缓存框架，使用synchronized关键字影响性能的差异
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    imoocCache2.compter("668");
                    System.out.println("第二次获取数据");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();

        //验证2.0缓存框架，使用synchronized关键字影响性能的差异
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    imoocCache2.compter("667");
                    System.out.println("第三次获取数据");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();


    }

}
